List接口概述

有序的 collection(也称为序列/线性表)。此接口的用户可以对列表中每个元素的插入位置进行精确地控制。用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素。与 set 不同,列表通常允许重复的元素。

List接口是Collection接口的一个子接口,List集合的特性是:有序,可重复,元素有索引,List接口有三个实现类

  • ArrayList:底层数据结构是数组,查询快,增删慢,非线程安全,效率高,数据增长为原来的50%
  • Vector:底层数据结构是数组,查询快,增删慢,线程安全,效率低,数据增长为原来的一倍
  • LinkedList:底层数据结构是链表,查询慢,增删快,非线程安全,效率高

Vector

底层数据结构是数组,查询快,增删慢,线程安全,效率低。

Vector类特有功能

  • public void addElement(E obj):添加元素
  • public E elementAt(int index):根据索引获取元素
  • public Enumeration elements():获取所有的元素

ArrayList

底层数据结构是数组,查询快,增删慢,线程不安全,效率高。

LinkedList

与ArrayList基于数组结构不同的是,LinkedList是基于链表的结构,因此具有链表特有的功能

方法声明 功能描述
addFirst() 在集合的第0个位置添加元素
addLast() 在集合的最后位置添加元素
getFirst() 获取集合的第0个元素
getLast() 获取集合的最后一个元素
removeFirst() 删除集合的第0个元素
removeLast() 删除集合的最后一个元素

代码示例:使用LinkedList来模拟一个栈数据结构

  1. package cn.itcast;
  2. import java.util.LinkedList;
  3. /*
  4. *使用LinkedList模拟栈数据结构的集合,并测试
  5. *1、栈的特点先进后出
  6. *2、 LinkedList的特有添加功能addFirst()
  7. */
  8. class MyStack {
  9. private LinkedList link;
  10. public MyStack() {
  11. link = new LinkedList();
  12. }
  13. public void add(Object obj) {
  14. // 将指定元素插入此列表的开头
  15. link.addFirst(obj);
  16. }
  17. public Object get() {
  18. // 移除并返回此列表的第一个元素。
  19. // return link.getFirst();
  20. return link.removeFirst();
  21. }
  22. public boolean isEmpty() {
  23. return link.isEmpty();
  24. }
  25. }
  26. /*
  27. * MyStack的测试
  28. */
  29. public class MyStackDemo {
  30. public static void main(String[] args) {
  31. // 创建集合对象
  32. MyStack ms = new MyStack();
  33. // 添加元素
  34. ms.add("hello");
  35. ms.add("world");
  36. ms.add("java");
  37. ms.add("android");
  38. ms.add("javase");
  39. while (!ms.isEmpty()) {
  40. System.out.println(ms.get());
  41. }
  42. }
  43. }

运行结果:

List接口 - 图1